package repositorios;

import interfaceRepositorio.IRepositorioEstadoCivil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import entidades.EstadoCivil;
import excecoes.FalhaPersistenciaException;

public class RepositorioEstadoCivil extends RepositorioAbstrato implements IRepositorioEstadoCivil{

	private String consultaStm = "SELECT id, estadoCivil FROM "+
								"TBEstadoCivil";
	
	private String consultaIdStm = "SELECT id, estadoCivil FROM "+
	"TBEstadoCivil WHERE id = ?";
	
	private String consultaEstadoStm = "SELECT id, estadoCivil FROM "+
	"TBEstadoCivil WHERE estadoCivil = ?";

		
	public RepositorioEstadoCivil(){
		super();
	}
	
	/* (non-Javadoc)
	 * @see repositorios.IRepositorioEstadoCivil#consultarEstadosCivis()
	 */
	public Collection<EstadoCivil> consultarEstadosCivis() throws FalhaPersistenciaException {
		Collection<EstadoCivil> retorno = new ArrayList<EstadoCivil>();
		
		Connection conexao = encontrarConexao();
		PreparedStatement preparedStatement = null;
		ResultSet resultado = null;
		
		try {
			preparedStatement = conexao.prepareStatement(consultaStm);
			resultado = preparedStatement.executeQuery();
			EstadoCivil estadoCivil = null;
			while(resultado.next()){
				estadoCivil = new EstadoCivil();
				estadoCivil.setId(resultado.getInt("id"));
				estadoCivil.setEstadoCivil(resultado.getString("estadoCivil"));
				retorno.add(estadoCivil);
			}
			
		} catch (SQLException e) {
			throw new FalhaPersistenciaException("Erro na consulta de estado civil.");
		} finally {
			try {
				preparedStatement.close();
			} catch (SQLException e) {
				throw new FalhaPersistenciaException("Erro conexao banco.");
			}
		}
		
		
		return retorno;
	}
	
	public EstadoCivil consultarEstadoCivilId(int id)
			throws FalhaPersistenciaException {

		EstadoCivil retorno = null;
		Connection conexao = encontrarConexao();
		PreparedStatement preparedStatement = null;
		ResultSet resultado = null;
		
		try {
			preparedStatement = conexao.prepareStatement(consultaIdStm);
			preparedStatement.setInt(1, id);			
			resultado = preparedStatement.executeQuery();
			
			if(resultado.next()){
				retorno = new EstadoCivil();
				retorno.setId(resultado.getInt("id"));
				retorno.setEstadoCivil(resultado.getString("estadoCivil"));			
			}
			
		} catch (SQLException e) {
			throw new FalhaPersistenciaException("Erro na consulta de estado civil.");
		} finally {
			try {
				preparedStatement.close();
				if(resultado!=null){
					resultado.close();
				}
			} catch (SQLException e) {
				throw new FalhaPersistenciaException("Erro conexao banco.");
			}
		}	
		
		
		return retorno;
	}
	
	public EstadoCivil consultarEstadoCivilEstado(String estadoCivil) throws FalhaPersistenciaException {
		EstadoCivil retorno = null;
		
		Connection conexao = encontrarConexao();
		PreparedStatement preparedStatement = null;
		ResultSet resultado = null;
		
		try {
			preparedStatement = conexao.prepareStatement(consultaEstadoStm);
			preparedStatement.setString(1, estadoCivil);			
			resultado = preparedStatement.executeQuery();
			
			if(resultado.next()){
				retorno = new EstadoCivil();
				retorno.setId(resultado.getInt("id"));
				retorno.setEstadoCivil(resultado.getString("estadoCivil"));			
			}
			
		} catch (SQLException e) {
			throw new FalhaPersistenciaException("Erro na consulta de estado civil.");
		} finally {
			try {
				preparedStatement.close();
				if(resultado!=null){
					resultado.close();
				}
			} catch (SQLException e) {
				throw new FalhaPersistenciaException("Erro conexao banco.");
			}
		}	
		
		
		return retorno;
	}
}
